import cn.bugstack.mybatis.dao.IUserDao;
import cn.bugstack.mybatis.io.Resource;
import cn.bugstack.mybatis.po.User;
import cn.bugstack.mybatis.session.SqlSession;
import cn.bugstack.mybatis.session.SqlSessionFactory;
import cn.bugstack.mybatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.Reader;
/**
 * 1. 读取mybatis总配置文件
 * 2. 读取mapper文件
 * 3. 将sql语句封装到 MappedStatement 再存进configuration的全局
 * 4. 将 dao 接口存储到 configuration 中的 映射器中即<接口类名, 代理类工厂>的集合
 * 5. 创建包含configuration的sqlSession工厂 并创建sqlSession
 * 6. 使用对用方法（会返回代理类的对应方法）
 * */
public class ApiTest {
    Logger logger = LoggerFactory.getLogger(ApiTest.class);
    @Test
    public void test() throws Exception {
        // 1. 从SqlSessionFactory中获取SqlSession
        Reader reader = Resource.getResourceAsReader("mybatis-config-datasource.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSqlSession();

        // 2. 获取映射器对象
        IUserDao userDao = sqlSession.getMapper(IUserDao.class);

        // 3. 测试验证
        String res = userDao.queryUserInfoById("10001");
        logger.info("测试结果：{}", res);
    }
}
